package com.AdvancedDemos.FileAndIO;

import java.io.File;

public class 递归删除一个文件夹 {
    public static void main(String[] args) {
        //需求2:递归删除一个文件夹
        //tips:先删除文件,让当前文件夹为空,再删除空文件夹
        File file = new File("helloworld\\src\\com\\AdvancedDemos\\FileAndIO\\A");
        deleteALl(file);
        System.out.println(file.listFiles().length == 0 ? file.getPath() + "下面的文件已删空!" : "出错了");

    }

    private static void deleteALl(File file) {
        File[] files = file.listFiles();
        for (File file1 : files) {
            if (file1.isFile()) {
                //表示是文件,直接删除
                String name = file1.getName();
                System.out.println("找到文件:" + name);
                if (file1.delete()) {
                    System.out.println("成功删除文件:" + name);
                }
            } else {
                //表示是文件夹
                if (file1.listFiles().length != 0) {
                    //文件夹非空
                    System.out.println(file1.getName() + "文件夹非空!");
                    deleteALl(file1);
                } else {
                    //文件夹已空
                    System.out.println(file1.getName() + "文件夹已空!");
                }
                //此时文件夹必定是空的,删除即可
                String name = file1.getName();
                System.out.println("找到空文件夹:" + name);
                if (file1.delete()) {
                    System.out.println("成功删除空文件夹:" + name);
                }
            }
        }
    }

    /**
     * 找到文件:ahah.java
     * 成功删除文件:ahah.java
     * B文件夹非空!
     * C文件夹非空!
     * D文件夹已空!
     * 找到空文件夹:D
     * 成功删除空文件夹:D
     * 找到文件:dnk.dsa
     * 成功删除文件:dnk.dsa
     * 找到空文件夹:C
     * 成功删除空文件夹:C
     * 找到文件:sdd.dsaa
     * 成功删除文件:sdd.dsaa
     * 找到空文件夹:B
     * 成功删除空文件夹:B
     * helloworld\src\com\AdvancedDemos\FileAndIO\A下面的文件已删空!
     */


    /**
     * Another Version
     *
     * @param path
     */
    public static void deleteDir(File path) {
        File[] file = path.listFiles();
        for (File file1 : file) {
            if (file1.isFile()) {
                //是文件直接删除
                file1.delete();
            } else {
                //是文件夹,递归
                deleteDir(file1);
            }
        }
        path.delete();//删除当前被遍历的文件夹
    }
}
